#include "APP_Router.h"


//设备列表最大列表数
#define DEVICE_MAX_NUM 5
Device *Device_list[DEVICE_MAX_NUM];//设备列表
int Device_num;//当前列表的设备数

//注册接收数据处理函数  json数据 -> 匹配对应接收设备->字节数组 -> 提交线程池
int APP_Router_Dispose_Data(char* json_data,int len)
{
    log_info("路由模块数据处理开始");
    log_info("路由模块接收json数据:\n%s",json_data);
    //接收json数据 -> message
    Message* msg =  APP_Json_To_Message(json_data);
    if(msg == NULL)
    {
        perror("路由模块json数据转化Message失败");
        return -1;
    }

    //匹配接收数据的接收设备
    for(int i = 0;i < Device_num;i++)
    {
        //设备连接类型匹配
        if(Device_list[i]->Conn_type == msg->conn_type)
        {
            int bytes_len = 0;
            char* bytes = APP_Message_To_Bytes(msg,&bytes_len);
            if(bytes == NULL || bytes_len == 0)
            {
                perror("Message转化字节数组失败");
                return -1;
            }
            //路由模块写设备任务提交线程池
            log_info("Message转化的bytes:");
            hexstr_print(bytes,bytes_len);
            APP_Device_recv_router(Device_list[i],bytes,bytes_len);
            return 0;
        }
    }
    return -1;
}

//初始化路由模块 把接收数据处理函数注册到 mqqt接收回调函数中 
void APP_Router_Init(void)
{
    log_info("路由模块启动 ");
    APP_MQTT_Register_Callback(APP_Router_Dispose_Data);
}

//注册设备到路由模块用于管理
int APP_Router_register_Device(Device* device)
{
    //设备注册到设备列表
    Device_list[Device_num] = device;
    Device_num++;

    //启动该设备的执行函数
    int ret = APP_Device_Start(device);
    if(ret < 0)
    {
        perror("路由模块调用注册设备执行函数失败");
        return -1;
    }
    return 0;
}

//释放路由器资源
void APP_Router_Destroy(void)
{
    for(int i = 0;i < Device_num;i++)
    {
        APP_Device_free(Device_list[i]);
    }
}

